package com.eatme.web.app.coupon.distribution.service;

import com.eatme.web.app.coupon.common.exception.AppException;
import com.eatme.web.app.coupon.distribution.constant.CouponStatus;
import com.eatme.web.app.coupon.distribution.entity.Coupon;

import java.util.List;

/**
 * Redis 相关的操作服务接口定义
 * 1.用户的三个状态优惠券 Cache 相关操作
 * 2.优惠券模版生成的优惠码 Cache 操作
 */
public interface IRedisService {

    /**
     * 根据 userId 和状态找到缓存的优惠券列表数据
     * @param userId 用户id
     * @param status 优惠券状态 {@link CouponStatus}
     * @return {@link Coupon}s 注意,可能会返回null,代表从没有过记录
     */
    List<Coupon> getCacheCoupons(Long userId,Integer status);

    /**
     * 保存空的优惠券列表到缓存中
     * @param userId 用户id
     * @param status 优惠券状态列表
     */
    void saveEmptyCouponListToCache(Long userId,List<Integer> status);

    /**
     * 尝试从cache 中获取一个优惠券码
     * @param templateId 优惠券模板主键
     * @return 优惠券码
     */
    String tryToAcquireCouponCodeFromCache(Integer templateId);

    /**
     * 将优惠券保存到 cache 中
     * @param userId 用户 id
     * @param coupons {@link Coupon}s
     * @param status 优惠券状态
     * @return 保存成功的个数
     * @throws AppException
     */
    Integer addCouponToCache(Long userId, List<Coupon> coupons,Integer status) throws AppException;
}
